#include "Mensaje.h"
#include "log.h"

#define MENSAJE_TIPO_        0
#define MENSAJE_TIPO_SYNC    1
#define MENSAJE_TIPO_TXT     2
#define MENSAJE_TIPO_CONTROL 3

bool Mensaje::good(){ 
    return tipo == MENSAJE_TIPO_;
}
Mensaje::Mensaje(){ 
    strcpy(cabecera, "CABECERA");
    tipo = MENSAJE_TIPO_;}

bool MensajeSYNC::good(){ 
    return tipo == MENSAJE_TIPO_SYNC;
}

MensajeSYNC::MensajeSYNC(){ 
    tipo = MENSAJE_TIPO_SYNC;
    idUsuario = 0;
}

bool MensajeTXT::good(){
    return tipo == MENSAJE_TIPO_TXT;
}
MensajeTXT::MensajeTXT(){ 
    tipo = MENSAJE_TIPO_TXT;
    idUsuario = idConversacion = 0;
    longitud = 0;
}

std::vector<MensajeTXT> MensajeTXT::generar(long idUsuario, long idConversacion, const char* texto, unsigned length){
    std::vector<MensajeTXT> mensajes;
    
    unsigned restante = length;
    unsigned inicio = 0;

    while(restante > 0){
	MensajeTXT mensaje;
	mensaje.idUsuario = idUsuario;
	mensaje.idConversacion = idConversacion;
	unsigned a_copiar = restante >= MENSAJE_LONG_TEXTO_MAX ? MENSAJE_LONG_TEXTO_MAX : restante;
	memset(mensaje.texto, 0, MENSAJE_LONG_TEXTO_MAX);
	memcpy(mensaje.texto, texto+inicio, a_copiar);
	mensajes.push_back(mensaje);
	restante -= a_copiar;
	inicio += a_copiar;
    }
    return mensajes;
}

MensajeControl::MensajeControl(){
    tipo = MENSAJE_TIPO_CONTROL;
}

bool MensajeControl::good(){
    return tipo == MENSAJE_TIPO_CONTROL;
}

bool MensajeControl::esConexion(){
    return evento==MENSAJE_CONTROL_CONEXION;
}

bool MensajeControl::esDesconexion(){
    return evento==MENSAJE_CONTROL_DESCONEXION;
}
